package com.ruoyi.business.service.impl;

import java.util.List;

import com.ruoyi.business.mapper.ProductAttributeMapper;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;

import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.business.domain.ProductAttribute;
import com.ruoyi.business.mapper.CategoryAttributeMapper;
import com.ruoyi.business.domain.CategoryAttribute;
import com.ruoyi.business.service.ICategoryAttributeService;

/**
 * 类目属性关联Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-03-13
 */
@Service
public class CategoryAttributeServiceImpl implements ICategoryAttributeService 
{
    @Autowired
    private CategoryAttributeMapper categoryAttributeMapper;

    @Autowired
    private ProductAttributeMapper productAttributeMapper;

    /**
     * 查询类目属性关联
     * 
     * @param id 类目属性关联主键
     * @return 类目属性关联
     */
    @Override
    public List<ProductAttribute> selectCategoryAttributeById(Long id)
    {

        CategoryAttribute categoryAttribute = categoryAttributeMapper.selectCategoryAttributeById(id);
        String attributeId = categoryAttribute.getAttributeId();
        List<String> strings = Arrays.asList(attributeId.split(","));

        // 从数据库中获取所有的productAttribute对象
        // 遍历所有的productAttribute对象
        List<ProductAttribute> productAttributeList = productAttributeMapper.selectProductAttributeForList(strings);
        return productAttributeList;

    }

    /**
     * 查询类目属性关联列表
     * 
     * @param categoryAttribute 类目属性关联
     * @return 类目属性关联
     */
    @Override
    public List<CategoryAttribute> selectCategoryAttributeList(CategoryAttribute categoryAttribute)
    {
        return categoryAttributeMapper.selectCategoryAttributeList(categoryAttribute);
    }

    /**
     * 新增类目属性关联
     * 
     * @param categoryAttribute 类目属性关联
     * @return 结果
     */
    @Transactional
    @Override
    public int insertCategoryAttribute(CategoryAttribute categoryAttribute)
    {
        categoryAttribute.setCreateTime(DateUtils.getNowDate());
        int rows = categoryAttributeMapper.insertCategoryAttribute(categoryAttribute);
        insertProductAttribute(categoryAttribute);
        return rows;
    }

    /**
     * 修改类目属性关联
     * 
     * @param categoryAttribute 类目属性关联
     * @return 结果
     */
    @Transactional
    @Override
    public int updateCategoryAttribute(CategoryAttribute categoryAttribute)
    {
        categoryAttribute.setUpdateTime(DateUtils.getNowDate());
        return categoryAttributeMapper.updateCategoryAttribute(categoryAttribute);
    }

    /**
     * 批量删除类目属性关联
     * 
     * @param ids 需要删除的类目属性关联主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteCategoryAttributeByIds(Long[] ids)
    {
        categoryAttributeMapper.deleteProductAttributeByIds(ids);
        return categoryAttributeMapper.deleteCategoryAttributeByIds(ids);
    }

    /**
     * 删除类目属性关联信息
     * 
     * @param id 类目属性关联主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteCategoryAttributeById(Long id)
    {
        categoryAttributeMapper.deleteProductAttributeById(id);
        return categoryAttributeMapper.deleteCategoryAttributeById(id);
    }


    /**
     * 新建属性关系
     * @param link
     * @return
     */
// 以下是对这段代码潜在问题的分析：
// 1. 在查询 CategoryAttribute 时，使用了 link.getCategoryId()，但根据方法名推测，这里可能应该使用 link.getId()，因为 addAttributeToCategory 方法通常是为特定的 CategoryAttribute 实例添加属性，而不是根据分类 ID 查询。
// 2. 代码假设 link.getAttributeIds() 返回的是一个非空的 Long 数组，如果该数组为 null，StringUtils.join 方法会抛出 NullPointerException。
// 3. 当 categoryAttribute 不为 null 时，直接调用 updateCategoryAttribute 方法更新 link，这可能会导致更新整个 CategoryAttribute 实例，而不仅仅是属性 ID。
// 
// 以下是修复后的代码示例：
@Override
public int addAttributeToCategory(CategoryAttribute link) {
    // 检查 attributeIds 是否为 null
    Long[] attributeIds = link.getAttributeIds();
    if (attributeIds == null) {
        attributeIds = new Long[0];
    }
    String attributeIdsStr = StringUtils.join(attributeIds, ",");
    link.setAttributeId(attributeIdsStr);
    link.setCreateTime(DateUtils.getNowDate());

    // 查询当前的 CategoryAttribute 实例
    CategoryAttribute categoryAttribute = categoryAttributeMapper.selectCategoryAttributeById(link.getCategoryId());
    if (categoryAttribute != null) {
        // 如果存在，更新属性 ID
        categoryAttribute.setAttributeId(attributeIdsStr);
        categoryAttribute.setUpdateTime(DateUtils.getNowDate());
        return categoryAttributeMapper.updateCategoryAttribute(categoryAttribute);
    }
    // 如果不存在，插入新的 CategoryAttribute 实例
    return categoryAttributeMapper.insertCategoryAttribute(link);
}

    @Override
    public int removeLinks(Long[] ids) {
        categoryAttributeMapper.deleteProductAttributeByIds(ids);
        return categoryAttributeMapper.deleteCategoryAttributeByIds(ids);
    }
    /**
     * 新增商品属性信息
     * 
     * @param categoryAttribute 类目属性关联对象
     */
    public void insertProductAttribute(CategoryAttribute categoryAttribute)
    {
        List<ProductAttribute> productAttributeList = categoryAttribute.getProductAttributeList();
        Long id = categoryAttribute.getId();
        if (StringUtils.isNotNull(productAttributeList))
        {
            List<ProductAttribute> list = new ArrayList<ProductAttribute>();
            for (ProductAttribute productAttribute : productAttributeList)
            {
                productAttribute.setId(id);
                list.add(productAttribute);
            }
            if (list.size() > 0)
            {
                categoryAttributeMapper.batchProductAttribute(list);
            }
        }
    }
}
